/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * dlgBuscarPallet.java
 *
 * Created on Nov 1, 2011, 10:40:38 AM
 */

package visual.Almacenamiento;

import bentity.beCoordenada;
import bentity.bePallet;
import bentity.beProducto;
import bentity.beRack;
import bentity.beUbicacion;
import blogic.blPallet;
import blogic.blProducto;
import blogic.blRack;
import blogic.blUbicacion;
import java.awt.Color;
import java.awt.Component;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import visual.Seguridad.visualHelper;

/**
 *
 * @author cesar
 */
public class dlgBuscarPallet extends javax.swing.JDialog {
       private bePallet palletElegido = null;
       private beRack rackElegido = null;
       private beUbicacion ubiElegido =null;
       public String estado = null;
       public int ind = -1;
       public int tipoP =-1;
       public int tipoProd = -1;
       public ArrayList<beUbicacion> ubicaciones = new ArrayList<beUbicacion>();
       public ArrayList<beUbicacion> ubicacionesDisponibles = new ArrayList<beUbicacion>();
       public static final int E_OCUPADA = 14;
       public static final int E_RESERVADA = 37;

    /** Creates new form dlgBuscarPallet */
    public dlgBuscarPallet(java.awt.Frame parent, boolean modal,int indicador) {
        super(parent, modal);
        initComponents();
        this.txtBusqUbicFila1.setTransferHandler(null);
        this.txtBusqUbicPiso1.setTransferHandler(null);
        this.txtBusqUbicRack1.setTransferHandler(null);
        this.txtBusqUbicUbicacion1.setTransferHandler(null);

        this.consultarPalletPorFiltros(indicador);
        this.setBounds(0, 0,900, 700);
        this.setResizable(false);
        ind = indicador;
//        this.txtBusqUbicFila1.setEnabled(false);
//        this.txtBusqUbicPiso1.setEnabled(false);
//        this.txtBusqUbicRack1.setEnabled(false);
//        this.txtBusqUbicUbicacion1.setEnabled(false);
//        this.btnBuscar.setEnabled(false);
        tblPallets.setDefaultRenderer(Object.class, new Render());
  
        visualHelper.centrarDialogoEnPantalla(this);
    }

    public dlgBuscarPallet(pnfReporteTrazabilidad parent, int indicador, boolean modal) {
        super((java.awt.Frame)null, modal);
        initComponents();
        this.txtBusqUbicFila1.setTransferHandler(null);
        this.txtBusqUbicPiso1.setTransferHandler(null);
        this.txtBusqUbicRack1.setTransferHandler(null);
        this.txtBusqUbicUbicacion1.setTransferHandler(null);

        this.consultarPalletPorFiltros(indicador);
        this.setBounds(0, 0,900, 600);
        this.setResizable(false);
        ind = indicador;
//        this.txtBusqUbicFila1.setEnabled(false);
//        this.txtBusqUbicPiso1.setEnabled(false);
//        this.txtBusqUbicRack1.setEnabled(false);
//        this.txtBusqUbicUbicacion1.setEnabled(false);
//        this.btnBuscar.setEnabled(false);
        tblPallets.setDefaultRenderer(Object.class, new Render());

        visualHelper.centrarDialogoEnPantalla(this);
    }

    public dlgBuscarPallet(java.awt.Frame parent, boolean modal,int indicador,int idPallet, int idProd) {
        super(parent, modal);
        initComponents();
        this.txtBusqUbicFila1.setTransferHandler(null);
        this.txtBusqUbicPiso1.setTransferHandler(null);
        this.txtBusqUbicRack1.setTransferHandler(null);
        this.txtBusqUbicUbicacion1.setTransferHandler(null);

        this.tipoP = idPallet;
        this.tipoProd = idProd;
        this.consultarPalletPorFiltros(indicador);
        this.setBounds(0, 0,900, 600);
        this.setResizable(false);
        this.ind = indicador;
        tblPallets.setDefaultRenderer(Object.class, new Render());

        visualHelper.centrarDialogoEnPantalla(this);
    }

  
    private void consultarPalletPorFiltros(int indicador){
        try{
            blPallet bp = new blPallet();
            blUbicacion bu= new blUbicacion();
            blProducto bpro = new blProducto();
            blRack br = new blRack();
            ArrayList<bePallet> pallets = new ArrayList<bePallet>();
            ArrayList<bePallet> pallets1 = new ArrayList<bePallet>();
            ArrayList<String> productos = new ArrayList<String>();
            ArrayList<String> productos1 = new ArrayList<String>();
            ArrayList<beRack> racks = new ArrayList<beRack>();
            ArrayList<beRack> racks1 = new ArrayList<beRack>();
            ArrayList<Integer> estados =new ArrayList<Integer>();
            ArrayList<beUbicacion> ubicacionesReservadas = new ArrayList<beUbicacion>();
            ArrayList<beUbicacion> ubicacionesBloqueadas = new ArrayList<beUbicacion>();
            estados = bu.getTipoEstadoInt();
            if(indicador ==1){
               pallets = bp.obtenerPallet(estados.get(0));
               ubicaciones = bu.obtenerUbicacion(estados.get(0));
               racks = new ArrayList<beRack>();
               racks=br.obtenerRacksXUbica(ubicaciones);
               productos = bp.obtenerProdXPallet(pallets);

            }
            else{
                if(indicador == 2){
                   // ArrayList<beUbicacion> ubicacionesOcupadas = bu.obtenerUbicacion(estados.get(0));

                    ubicacionesDisponibles = bu.dameUbicacionesPosibles(tipoProd, tipoP);
                    racks=br.obtenerRacksXUbica(ubicacionesDisponibles);
                }
                else{
                      if(indicador == 3 ){
                         ArrayList<beUbicacion> ubicacionesOcupadas = bu.obtenerUbicacion(estados.get(0));
                         ubicacionesReservadas = bu.obtenerUbicacion(estados.get(4));
                         ubicacionesDisponibles = bu.obtenerUbicacionDisponible(ubicacionesOcupadas,ubicacionesReservadas);
                         racks=br.obtenerRacksXUbica(ubicacionesDisponibles);
                         ubicacionesBloqueadas = bu.obtenerUbicacionBloqueadas(ubicacionesOcupadas,ubicacionesReservadas);
                         racks1 =br.obtenerRacksXUbica(ubicacionesBloqueadas);
                      }
                      else{
                          if (indicador == 4){
                              pallets = bp.obtenerPallet(estados.get(0));
                              ubicaciones = bu.obtenerUbicacion(estados.get(0));
                              racks=br.obtenerRacksXUbica(ubicaciones);
                              productos = bp.obtenerProdXPallet(pallets);
                              pallets1 = bp.obtenerPallet(estados.get(4));
                              ubicacionesReservadas = bu.obtenerUbicacion(estados.get(4));
                              racks1=br.obtenerRacksXUbica(ubicacionesReservadas);
                              productos1 = bp.obtenerProdXPallet(pallets1);
                              llenarTabla4(ubicaciones,racks,productos,pallets,pallets1,ubicacionesReservadas,racks1,productos1);
                          }
                      }
                

                }
            }



            DefaultTableModel dtm = (DefaultTableModel)this.tblPallets.getModel();
            this.limpiarTabla(dtm);
            if (indicador == 1){
               if (pallets.size() == 0 || racks.size() == 0 || productos.size()==0)
                JOptionPane.showMessageDialog(this, "La búsqueda no arrojó resultados.", "Información", JOptionPane.INFORMATION_MESSAGE);
               else

                this.llenarTabla(pallets,racks,productos,ubicaciones);
            }
          else{
                if (indicador == 2) {
                    if (ubicacionesDisponibles.size()== 0 || racks.size()==0)
                         JOptionPane.showMessageDialog(this, "La búsqueda no arrojó resultados.", "Información", JOptionPane.INFORMATION_MESSAGE);
                    else

                         this.llenarTabla2(racks,ubicacionesDisponibles);

                }
                if(indicador == 3){
                    if ((ubicacionesDisponibles.size()== 0 && racks.size()== 0) && (ubicacionesBloqueadas.size()== 0 && racks1.size() == 0))
                         JOptionPane.showMessageDialog(this, "La búsqueda no arrojó resultados.", "Información", JOptionPane.INFORMATION_MESSAGE);
                    else

                         this.llenarTabla3(racks,ubicacionesDisponibles,racks1,ubicacionesBloqueadas);
                }
                if(indicador == 4){
                     if ((ubicaciones.size()== 0 && racks.size()==0) && (ubicacionesReservadas.size()== 0 && racks1.size() == 0))
                         JOptionPane.showMessageDialog(this, "La búsqueda no arrojó resultados.", "Información", JOptionPane.INFORMATION_MESSAGE);
                    else

                         this.llenarTabla4(ubicaciones,racks,productos,pallets,pallets1,ubicacionesReservadas,racks1,productos1);
                }
          }


        }
        catch (Exception e){
            e.printStackTrace();
            visualHelper.mostrarMensajeError("Ocurrió un error en la búsqueda");
        }
    }
      private void llenarTabla2(ArrayList<beRack> racks,ArrayList<beUbicacion> ubicacionesDisponibles) {
        DefaultTableModel dtm = (DefaultTableModel)this.tblPallets.getModel();
        Object [] datos = new Object [6];
        for(int i=0;i<ubicacionesDisponibles.size();i++){
            datos[0] = "----";
            datos[1] = racks.get(i).getId_rack();
            String cad = "B"+racks.get(i).getNumRack()+"-F"+racks.get(i).getNumFila()+"-P"+ubicacionesDisponibles.get(i).getCoordenadas().getPiso()+"-C"+ubicacionesDisponibles.get(i).getCoordenadas().getUbicacion()+"";
            datos[2] = cad;
            datos[3] = "----";
            datos[4] = ubicacionesDisponibles.get(i).getId_ubicacion();
            datos[5] = "Disponible";
            dtm.addRow(datos);
        }
        this.tblPallets.setRowSelectionAllowed(true);
        this.tblPallets.setColumnSelectionAllowed(false);
    }
       private void llenarTabla3(ArrayList<beRack> racks,ArrayList<beUbicacion> ubicacionesDisponibles,ArrayList<beRack> racks1,ArrayList<beUbicacion> ubicacionesBloqueadas) {
        DefaultTableModel dtm = (DefaultTableModel)this.tblPallets.getModel();
        Object [] datos = new Object [6];
        for(int i=0;i<ubicacionesDisponibles.size();i++){
            datos[0] = "----";
            datos[1] = racks.get(i).getId_rack();
            String cad = "B"+racks.get(i).getNumRack()+"-F"+racks.get(i).getNumFila()+"-P"+ubicacionesDisponibles.get(i).getNumPiso()+"-C"+ubicacionesDisponibles.get(i).getNumUbicacion()+"";
            datos[2] = cad;
            datos[3] = "----";
            datos[4] = ubicacionesDisponibles.get(i).getId_ubicacion();
            datos[5]= "Disponible";
            dtm.addRow(datos);
        }
        for(int i=0;i<ubicacionesBloqueadas.size();i++){
            datos[0] = "XXXX";
            datos[1] = racks1.get(i).getId_rack();
            String cad = "B"+racks1.get(i).getNumRack()+"-F"+racks1.get(i).getNumFila()+"-P"+ubicacionesBloqueadas.get(i).getNumPiso()+"-C"+ubicacionesBloqueadas.get(i).getNumUbicacion()+"";
            datos[2] = cad;
            datos[3] = "XXXX";
            datos[4] = ubicacionesBloqueadas.get(i).getId_ubicacion();
            datos[5] = "Bloqueado";
            dtm.addRow(datos);
        }
        this.tblPallets.setRowSelectionAllowed(true);
        this.tblPallets.setColumnSelectionAllowed(false);
    }

    private void llenarTabla4(ArrayList<beUbicacion> ubicaciones,ArrayList<beRack> racks,ArrayList<String> productos,ArrayList<bePallet> pallets,ArrayList<bePallet> pallets1,ArrayList<beUbicacion> ubicacionesReservadas,ArrayList<beRack> racks1,ArrayList<String> productos1){
         DefaultTableModel dtm = (DefaultTableModel)this.tblPallets.getModel();
        Object [] datos = new Object [6];
        for(int i=0;i<ubicaciones.size();i++){
            datos[0] = pallets.get(i).getId_Pallet();
            datos[1] = racks.get(i).getId_rack();
            String cad = "B"+racks.get(i).getNumRack()+"-F"+racks.get(i).getNumFila()+"-P"+ubicaciones.get(i).getNumPiso()+"-C"+ubicaciones.get(i).getNumUbicacion()+"";
            datos[2] = cad;
            datos[3] = productos.get(i);
            datos[4] = ubicaciones.get(i).getId_ubicacion();
            datos[5]= "Ocupado";
            dtm.addRow(datos);
        }
        for(int i=0;i<ubicacionesReservadas.size();i++){
            datos[0] = pallets1.get(i).getId_Pallet();
            datos[1] = racks1.get(i).getId_rack();
            String cad = "B"+racks1.get(i).getNumRack()+"-F"+racks1.get(i).getNumFila()+"-P"+ubicacionesReservadas.get(i).getNumPiso()+"-C"+ubicacionesReservadas.get(i).getNumUbicacion()+"";
            datos[2] = cad;
            datos[3] = productos1.get(i);
            datos[4] = ubicacionesReservadas.get(i).getId_ubicacion();
            datos[5] = "Reservado";
            dtm.addRow(datos);
        }
        this.tblPallets.setRowSelectionAllowed(true);
        this.tblPallets.setColumnSelectionAllowed(false);
    }
      private void llenarTabla(ArrayList<bePallet> pallets,ArrayList<beRack> racks,ArrayList<String> productos,ArrayList<beUbicacion> ubicaciones) {
        DefaultTableModel dtm = (DefaultTableModel)this.tblPallets.getModel();
        Object [] datos = new Object [6];
        for(int i=0;i<racks.size();i++){
            datos[0] = pallets.get(i).getId_Pallet();
            datos[1] = racks.get(i).getId_rack();
            String cad = "B"+racks.get(i).getNumRack()+"-F"+racks.get(i).getNumFila()+"-P"+ubicaciones.get(i).getNumPiso()+"-C"+ubicaciones.get(i).getNumUbicacion()+"";
            datos[2] = cad;
            datos[3] = productos.get(i);
            datos[4]= ubicaciones.get(i).getId_ubicacion();
            datos[5] = "Ocupado";
            dtm.addRow(datos);
        }
        this.tblPallets.setRowSelectionAllowed(true);
        this.tblPallets.setColumnSelectionAllowed(false);
    }

    private void limpiarTabla(DefaultTableModel dtm) {
        int numFilas = dtm.getRowCount();
        for(int i=(numFilas-1);i>=0;i--)
            dtm.removeRow(i);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        lblTitulo = new javax.swing.JLabel();
        jScrollPane2 = new javax.swing.JScrollPane();
        tblPallets = new javax.swing.JTable();
        lblRacks = new javax.swing.JLabel();
        btnSeleccionar = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();
        pnlBusqueda1 = new javax.swing.JPanel();
        lblBusqUbicFila1 = new javax.swing.JLabel();
        lblBusqUbicRack1 = new javax.swing.JLabel();
        lblBusqUbicPiso1 = new javax.swing.JLabel();
        txtBusqUbicPiso1 = new javax.swing.JTextField();
        lblBusqUbicUbicacion1 = new javax.swing.JLabel();
        txtBusqUbicUbicacion1 = new javax.swing.JTextField();
        txtBusqUbicRack1 = new javax.swing.JTextField();
        txtBusqUbicFila1 = new javax.swing.JTextField();
        lblBusqUbicCodigo2 = new javax.swing.JLabel();
        btnBuscar = new javax.swing.JButton();
        btnLimpiar1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setAlwaysOnTop(true);
        setMinimumSize(new java.awt.Dimension(900, 700));
        setModal(true);
        getContentPane().setLayout(null);

        lblTitulo.setFont(new java.awt.Font("DejaVu Sans", 0, 36));
        lblTitulo.setForeground(new java.awt.Color(0, 0, 0));
        lblTitulo.setText("Buscar Ubicación");
        getContentPane().add(lblTitulo);
        lblTitulo.setBounds(290, 10, 320, 43);

        tblPallets.setAutoCreateRowSorter(true);
        tblPallets.setForeground(new java.awt.Color(0, 0, 0));
        tblPallets.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "CodPallet", "CodRack", "Coordenadas", "Producto", "CodUbi", "Estado"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tblPallets.setColumnSelectionAllowed(true);
        tblPallets.setGridColor(javax.swing.UIManager.getDefaults().getColor("TableHeader.background"));
        tblPallets.setMaximumSize(new java.awt.Dimension(800, 72));
        tblPallets.setMinimumSize(new java.awt.Dimension(200, 72));
        tblPallets.setSelectionForeground(new java.awt.Color(0, 0, 0));
        tblPallets.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        tblPallets.getTableHeader().setReorderingAllowed(false);
        jScrollPane2.setViewportView(tblPallets);
        tblPallets.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION);

        getContentPane().add(jScrollPane2);
        jScrollPane2.setBounds(30, 250, 820, 180);

        lblRacks.setFont(new java.awt.Font("Dialog", 0, 14));
        lblRacks.setText("Ubicaciones");
        getContentPane().add(lblRacks);
        lblRacks.setBounds(30, 230, 130, 17);

        btnSeleccionar.setBackground(new java.awt.Color(240, 235, 226));
        btnSeleccionar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnSeleccionar.setForeground(new java.awt.Color(0, 0, 0));
        btnSeleccionar.setText("Elegir");
        btnSeleccionar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSeleccionarActionPerformed(evt);
            }
        });
        getContentPane().add(btnSeleccionar);
        btnSeleccionar.setBounds(190, 500, 120, 27);

        btnCancelar.setBackground(new java.awt.Color(240, 235, 226));
        btnCancelar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnCancelar.setForeground(new java.awt.Color(0, 0, 0));
        btnCancelar.setText("Cancelar");
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });
        getContentPane().add(btnCancelar);
        btnCancelar.setBounds(570, 500, 120, 27);

        pnlBusqueda1.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Busqueda", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 14))); // NOI18N
        pnlBusqueda1.setFont(new java.awt.Font("Ubuntu", 0, 14));
        pnlBusqueda1.setLayout(null);

        lblBusqUbicFila1.setFont(new java.awt.Font("Dialog", 0, 12));
        lblBusqUbicFila1.setForeground(new java.awt.Color(0, 0, 0));
        lblBusqUbicFila1.setText("-F");
        pnlBusqueda1.add(lblBusqUbicFila1);
        lblBusqUbicFila1.setBounds(200, 40, 20, 20);

        lblBusqUbicRack1.setFont(new java.awt.Font("Dialog", 0, 12));
        lblBusqUbicRack1.setForeground(new java.awt.Color(0, 0, 0));
        lblBusqUbicRack1.setText("B");
        pnlBusqueda1.add(lblBusqUbicRack1);
        lblBusqUbicRack1.setBounds(140, 40, 20, 20);

        lblBusqUbicPiso1.setFont(new java.awt.Font("Dialog", 0, 12));
        lblBusqUbicPiso1.setForeground(new java.awt.Color(0, 0, 0));
        lblBusqUbicPiso1.setText("-P");
        pnlBusqueda1.add(lblBusqUbicPiso1);
        lblBusqUbicPiso1.setBounds(260, 40, 20, 20);

        txtBusqUbicPiso1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtBusqUbicPiso1KeyTyped(evt);
            }
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtBusqUbicPiso1KeyPressed(evt);
            }
        });
        pnlBusqueda1.add(txtBusqUbicPiso1);
        txtBusqUbicPiso1.setBounds(280, 30, 30, 28);

        lblBusqUbicUbicacion1.setFont(new java.awt.Font("Dialog", 0, 12));
        lblBusqUbicUbicacion1.setForeground(new java.awt.Color(0, 0, 0));
        lblBusqUbicUbicacion1.setText("-C");
        pnlBusqueda1.add(lblBusqUbicUbicacion1);
        lblBusqUbicUbicacion1.setBounds(320, 40, 20, 20);

        txtBusqUbicUbicacion1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtBusqUbicUbicacion1KeyTyped(evt);
            }
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtBusqUbicUbicacion1KeyPressed(evt);
            }
        });
        pnlBusqueda1.add(txtBusqUbicUbicacion1);
        txtBusqUbicUbicacion1.setBounds(340, 30, 30, 28);

        txtBusqUbicRack1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtBusqUbicRack1KeyTyped(evt);
            }
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtBusqUbicRack1KeyPressed(evt);
            }
        });
        pnlBusqueda1.add(txtBusqUbicRack1);
        txtBusqUbicRack1.setBounds(160, 30, 30, 28);

        txtBusqUbicFila1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtBusqUbicFila1KeyTyped(evt);
            }
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtBusqUbicFila1KeyPressed(evt);
            }
        });
        pnlBusqueda1.add(txtBusqUbicFila1);
        txtBusqUbicFila1.setBounds(220, 30, 30, 28);

        lblBusqUbicCodigo2.setFont(new java.awt.Font("Dialog", 0, 12));
        lblBusqUbicCodigo2.setForeground(new java.awt.Color(0, 0, 0));
        lblBusqUbicCodigo2.setText("Codigo");
        pnlBusqueda1.add(lblBusqUbicCodigo2);
        lblBusqUbicCodigo2.setBounds(60, 40, 60, 15);

        btnBuscar.setBackground(new java.awt.Color(240, 235, 226));
        btnBuscar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnBuscar.setForeground(new java.awt.Color(0, 0, 0));
        btnBuscar.setText("Buscar");
        btnBuscar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBuscarActionPerformed(evt);
            }
        });
        pnlBusqueda1.add(btnBuscar);
        btnBuscar.setBounds(210, 80, 120, 27);

        btnLimpiar1.setBackground(new java.awt.Color(240, 235, 226));
        btnLimpiar1.setFont(new java.awt.Font("Dialog", 0, 12));
        btnLimpiar1.setForeground(new java.awt.Color(0, 0, 0));
        btnLimpiar1.setText("Limpiar");
        btnLimpiar1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnLimpiar1ActionPerformed(evt);
            }
        });
        pnlBusqueda1.add(btnLimpiar1);
        btnLimpiar1.setBounds(520, 80, 110, 27);

        getContentPane().add(pnlBusqueda1);
        pnlBusqueda1.setBounds(30, 100, 820, 120);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnSeleccionarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSeleccionarActionPerformed
        // TODO add your handling code here:
        int fila = this.tblPallets.getSelectedRow();
        if (fila == -1)
            JOptionPane.showMessageDialog(this, "Debe seleccionar un pallet.", "Información", JOptionPane.INFORMATION_MESSAGE);
        else{
            if ( this.tblPallets.getSelectedRowCount() > 1){
                visualHelper.mostrarMensajeAdvertencia("Debe seleccionar una sola fila");
            }
            else {
                blUbicacion bu = new blUbicacion();
                ArrayList<String> estados = new ArrayList<String>();
                try {
                estados = bu.getTipoEstado();
                 } catch (SQLException ex) {
                Logger.getLogger(dlgBuscarPallet.class.getName()).log(Level.SEVERE, null, ex);
                }
            if(this.tblPallets.getValueAt(fila, 0).toString().compareTo("----")!= 0 && this.tblPallets.getValueAt(fila, 0).toString().compareTo("XXXX")!= 0)
              this.palletElegido = new bePallet(Integer.parseInt(this.tblPallets.getValueAt(fila, 0).toString()));
            if(this.tblPallets.getValueAt(fila, 0).toString().compareTo("----")== 0){
                estado = estados.get(2);
            }
            else {
                if (this.tblPallets.getValueAt(fila, 0).toString().compareTo("XXXX")== 0)
                    estado = estados.get(1);
                else
                    if (this.tblPallets.getValueAt(fila, 5).toString().compareTo("Reservado") == 0)
                        estado = estados.get(4);
                    else
                        if (this.tblPallets.getValueAt(fila, 5).toString().compareTo("Ocupado") == 0)
                        estado = estados.get(0);
            }
            String cad = this.tblPallets.getValueAt(fila,2).toString();
            int inicio = cad.indexOf("F");
            int fin = cad.indexOf("P", inicio +1);
            String numRack = cad.substring(1, inicio-1);
            String numFila = cad.substring(inicio + 1, fin-1);
            inicio = cad.indexOf("C", fin + 1);
            String numPiso = cad.substring(fin + 1, inicio-1);
            String numUbi = cad.substring(inicio +1, cad.length());
            this.rackElegido = new beRack(Integer.parseInt(numFila),Integer.parseInt(numRack));
            this.ubiElegido = new beUbicacion(Integer.parseInt(this.tblPallets.getValueAt(fila,4).toString()),Integer.parseInt(numPiso),Integer.parseInt(numUbi));
                 if ( ind == 1){
                   ubiElegido.setTipo_pallet(ubicaciones.get(fila).getTipo_pallet());
                   ubiElegido.setTipoProd(ubicaciones.get(fila).getTipoProd());
                }


            this.setVisible(false);
           }
        }
}//GEN-LAST:event_btnSeleccionarActionPerformed

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
           int rslt = JOptionPane.showConfirmDialog(this, "¿Esta seguro que quiere salir, es probable que no haya elegido ninguna ubicacion?", "Confirmación", JOptionPane.YES_NO_OPTION);
        if (rslt == JOptionPane.YES_OPTION){
            this.setVisible(false);
            this.dispose();
        }
}//GEN-LAST:event_btnCancelarActionPerformed

      private void consultarUbicacionesPorFiltros(int ind){

        blUbicacion bu = new blUbicacion();
        blPallet bp = new blPallet();

        try{
            String strFila =this.txtBusqUbicFila1.getText();
            String strRack = this.txtBusqUbicRack1.getText();
            String strPiso = this.txtBusqUbicPiso1.getText();
            String strUbi = this.txtBusqUbicUbicacion1.getText();
            ArrayList<String> productos = new ArrayList<String>();
            ArrayList<String> productos1 = new ArrayList<String>();
            ArrayList<String> estados = new ArrayList<String>();
            ArrayList<String> estados1 = new ArrayList<String>();
            ArrayList<bePallet> pallets = new ArrayList<bePallet>();
            ArrayList<bePallet> pallets1 = new ArrayList<bePallet>();
            ArrayList<beRack> racks = new ArrayList<beRack>();
            ArrayList<beUbicacion> ubicacionesOcupadas = new ArrayList<beUbicacion>();
            ArrayList<beRack> racks1 = new ArrayList<beRack>();
            ArrayList<Integer> estadosL =new ArrayList<Integer>();
            ArrayList<beUbicacion> ubicacionesBloqueadas = new ArrayList<beUbicacion>();
            estadosL = bu.getTipoEstadoInt();
            blRack br = new blRack();
            if (ind == 1){
            pallets = bu.dameUbicacionesOcupada(ubicacionesOcupadas,E_OCUPADA,strFila,strRack,strPiso,strUbi,estados);
            productos = bp.obtenerProdXPallet(pallets);
            racks = br.obtenerRacksXUbica(ubicacionesOcupadas);
            DefaultTableModel dtm = (DefaultTableModel)this.tblPallets.getModel();
            this.limpiarTabla(dtm);
               if (pallets.size() == 0 || ubicacionesOcupadas.size()== 0 || productos.size()==0)
                JOptionPane.showMessageDialog(this, "La búsqueda no arrojó resultados.", "Advertencia", JOptionPane.WARNING_MESSAGE);
               else

                this.llenarTablaFiltros(ubicacionesOcupadas,estados,productos,pallets,racks);
            }
            else {
                if (ind == 2){
                    ubicacionesDisponibles = bu.dameUbicacionesPosiblesXFiltros(tipoProd, tipoP,strFila,strRack,strPiso,strUbi);
                    racks=br.obtenerRacksXUbica(ubicacionesDisponibles);
                    DefaultTableModel dtm = (DefaultTableModel)this.tblPallets.getModel();
                    this.limpiarTabla(dtm);
                      if (ubicacionesDisponibles.size() == 0)
                        JOptionPane.showMessageDialog(this, "La búsqueda no arrojó resultados.", "Advertencia", JOptionPane.INFORMATION_MESSAGE);
                      else
                        this.llenarTabla2(racks,ubicacionesDisponibles);

                }
               else {
                    if (ind == 3){
                        ubicacionesOcupadas = bu.obtenerUbicacion(estadosL.get(0));
                        ArrayList<beUbicacion> ubicacionesReservadas = bu.obtenerUbicacion(estadosL.get(4));
                        ubicacionesDisponibles = bu.obtenerUbicacionDisponibleXFiltros(ubicacionesOcupadas,ubicacionesReservadas,strFila,strRack,strPiso,strUbi);
                        racks=br.obtenerRacksXUbica(ubicacionesDisponibles);
                        ubicacionesBloqueadas = bu.obtenerUbicacionBloqueadasXFiltros(ubicacionesOcupadas,ubicacionesReservadas,strFila,strRack,strPiso,strUbi);
                        racks1 =br.obtenerRacksXUbica(ubicacionesBloqueadas);
                        DefaultTableModel dtm = (DefaultTableModel)this.tblPallets.getModel();
                        this.limpiarTabla(dtm);
                        if ((ubicacionesDisponibles.size()== 0 && racks.size()==0) && (ubicacionesBloqueadas.size()== 0 && racks1.size() == 0))
                           JOptionPane.showMessageDialog(this, "La búsqueda no arrojó resultados.", "Advertencia", JOptionPane.WARNING_MESSAGE);
                         else

                           this.llenarTabla3(racks,ubicacionesDisponibles,racks1,ubicacionesBloqueadas);


                    }
                   else {
                        if (ind == 4){
                             ArrayList<beUbicacion> ubi = new ArrayList<beUbicacion>();
                             blRack blRack = new blRack();
                             pallets1 =bu.dameUbicacionesOcupada(ubi,E_OCUPADA, strFila, strRack, strPiso, strUbi, estados1);
                             racks1 = blRack.obtenerRacksXUbica(ubi);
                             productos1 = bp.obtenerProdXPallet(pallets1);
                             pallets = bu.dameUbicacionesOcupada(ubicacionesOcupadas,E_RESERVADA,strFila,strRack,strPiso,strUbi,estados);
                             racks = blRack.obtenerRacksXUbica(ubicacionesOcupadas);
                             productos = bp.obtenerProdXPallet(pallets);
                             DefaultTableModel dtm = (DefaultTableModel)this.tblPallets.getModel();
                             this.limpiarTabla(dtm);
                             if ((pallets.size() == 0 || ubicacionesOcupadas.size()== 0 || productos.size()==0) && pallets1.size()== 0 )
                                JOptionPane.showMessageDialog(this, "La búsqueda no arrojó resultados.", "Advertencia", JOptionPane.WARNING_MESSAGE);
                             else

                                this.llenarTablaFiltros(ubicacionesOcupadas,estados,productos,pallets,ubi, estados1, productos1, pallets1,racks,racks1);
                                
                        }
                   }
               }
            }


        }
        catch (Exception e){
            e.printStackTrace();
            visualHelper.mostrarMensajeError("Ocurrió un error en la búsqueda");
        }
    }

   

    private void llenarTablaFiltros(ArrayList<beUbicacion> ubicaciones,ArrayList<String> estados,ArrayList<String> productos, ArrayList<bePallet> pallets,ArrayList<beRack> racks) {
        DefaultTableModel dtm = (DefaultTableModel)this.tblPallets.getModel();
        Object [] datos = new Object [6];
        for(int i=0;i<ubicaciones.size();i++){
            datos[0] = pallets.get(i).getId_Pallet();
            datos[1]= racks.get(i).getId_rack();
            beCoordenada coordenada = new beCoordenada();
            coordenada = ubicaciones.get(i).getCoordenadas();
            String cad = "B"+coordenada.getRack()+"-F"+coordenada.getFila()+"-P"+coordenada.getPiso()+"-C"+coordenada.getUbicacion()+"";
            datos[2] = cad;
            datos[3] = productos.get(i);
            datos[4]= ubicaciones.get(i).getId_ubicacion();
            datos[5] = estados.get(i);
            dtm.addRow(datos);
        }
        this.tblPallets.setRowSelectionAllowed(true);
        this.tblPallets.setColumnSelectionAllowed(false);
    }
    private void llenarTablaFiltros(ArrayList<beUbicacion> ubicaciones,ArrayList<String> estados,ArrayList<String> productos, ArrayList<bePallet> pallets,ArrayList<beUbicacion> ubicaciones1,ArrayList<String> estados1,ArrayList<String> productos1, ArrayList<bePallet> pallets1,ArrayList<beRack> racks1,ArrayList<beRack> racks) {
        DefaultTableModel dtm = (DefaultTableModel)this.tblPallets.getModel();
        Object [] datos = new Object [6];
        for(int i=0;i<ubicaciones.size();i++){
            datos[0] = pallets.get(i).getId_Pallet();
            datos[1] = racks1.get(i).getId_rack();
            beCoordenada coordenada = new beCoordenada();
            coordenada = ubicaciones.get(i).getCoordenadas();
            String cad = "B"+coordenada.getRack()+"-F"+coordenada.getFila()+"-P"+coordenada.getPiso()+"-C"+coordenada.getUbicacion()+"";
            datos[2] = cad;
            datos[3] = productos.get(i);
            datos[4]= ubicaciones.get(i).getId_ubicacion();
            datos[5] = estados.get(i);
            dtm.addRow(datos);
        }
         for(int i=0;i<ubicaciones1.size();i++){
            datos[0] = pallets1.get(i).getId_Pallet();
            datos[1]= racks.get(i).getId_rack();
            beCoordenada coordenada = new beCoordenada();
            coordenada = ubicaciones1.get(i).getCoordenadas();
            String cad = "B"+coordenada.getRack()+"-F"+coordenada.getFila()+"-P"+coordenada.getPiso()+"-C"+coordenada.getUbicacion()+"";
            datos[2] = cad;
            datos[3] = productos1.get(i);
            datos[4]= ubicaciones1.get(i).getId_ubicacion();
            datos[5] = estados1.get(i);
            dtm.addRow(datos);
        }
        this.tblPallets.setRowSelectionAllowed(true);
        this.tblPallets.setColumnSelectionAllowed(false);
    }

    private void txtBusqUbicFila1KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtBusqUbicFila1KeyPressed
        // TODO add your handling code here:
        visualHelper.controlarTamanho(evt, 5, txtBusqUbicFila1);
        //this.consultarUbicacionesPorFiltros(ind);
       
    }//GEN-LAST:event_txtBusqUbicFila1KeyPressed

    private void txtBusqUbicRack1KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtBusqUbicRack1KeyPressed
        // TODO add your handling code here:
        visualHelper.controlarTamanho(evt, 5, txtBusqUbicRack1);
        //this.consultarUbicacionesPorFiltros(ind);
    }//GEN-LAST:event_txtBusqUbicRack1KeyPressed

    private void txtBusqUbicPiso1KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtBusqUbicPiso1KeyPressed
        // TODO add your handling code here:
        visualHelper.controlarTamanho(evt, 5, txtBusqUbicPiso1);
        //this.consultarUbicacionesPorFiltros(ind);
       
    }//GEN-LAST:event_txtBusqUbicPiso1KeyPressed

    private void txtBusqUbicUbicacion1KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtBusqUbicUbicacion1KeyPressed
        // TODO add your handling code here:
        visualHelper.controlarTamanho(evt, 5, txtBusqUbicUbicacion1);
        //this.consultarUbicacionesPorFiltros(ind);
    }//GEN-LAST:event_txtBusqUbicUbicacion1KeyPressed

    private void txtBusqUbicFila1KeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtBusqUbicFila1KeyTyped
        // TODO add your handling code here:
        visualHelper.soloDigitosEnTextField(evt);
        
    }//GEN-LAST:event_txtBusqUbicFila1KeyTyped

    private void txtBusqUbicRack1KeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtBusqUbicRack1KeyTyped
        // TODO add your handling code here:
        visualHelper.soloDigitosEnTextField(evt);
        
    }//GEN-LAST:event_txtBusqUbicRack1KeyTyped

    private void txtBusqUbicPiso1KeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtBusqUbicPiso1KeyTyped
        // TODO add your handling code here:
         visualHelper.soloDigitosEnTextField(evt);
    }//GEN-LAST:event_txtBusqUbicPiso1KeyTyped

    private void txtBusqUbicUbicacion1KeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtBusqUbicUbicacion1KeyTyped
        // TODO add your handling code here:
        visualHelper.soloDigitosEnTextField(evt);
        
    }//GEN-LAST:event_txtBusqUbicUbicacion1KeyTyped

    private void btnBuscarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBuscarActionPerformed
        // TODO add your handling code here:
        this.consultarUbicacionesPorFiltros(ind);
    }//GEN-LAST:event_btnBuscarActionPerformed

    private void btnLimpiar1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLimpiar1ActionPerformed
        // TODO add your handling code here:

        this.txtBusqUbicFila1.setText("");
        this.txtBusqUbicPiso1.setText("");
        this.txtBusqUbicRack1.setText("");
        this.txtBusqUbicUbicacion1.setText("");
}//GEN-LAST:event_btnLimpiar1ActionPerformed

    /**
    * @param args the command line arguments
    */
    

    public bePallet getPalletElegido() {
        return palletElegido;
    }

    /**
     * @param clienteElegido the clienteElegido to set
     */
    public void setPalletElegido(bePallet palletElegido) {
        this.palletElegido = palletElegido;
    }

    public beRack getRackElegido() {
        return rackElegido;
    }

    /**
     * @param clienteElegido the clienteElegido to set
     */
    public void setRackElegido(beRack rackElegido) {
        this.rackElegido = rackElegido;
    }

    public beUbicacion getUbicacionElegido() {
        return ubiElegido;
    }

    /**
     * @param clienteElegido the clienteElegido to set
     */
    public void setUbicacionElegido(beUbicacion ubiElegido) {
        this.ubiElegido = ubiElegido;
    }

     public javax.swing.JTable getTblPallet() {
        return tblPallets;
    }



    public void setTblPallet(javax.swing.JTable tblPallets) {
        this.tblPallets = tblPallets;
    }





    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnBuscar;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnLimpiar1;
    private javax.swing.JButton btnSeleccionar;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JLabel lblBusqUbicCodigo2;
    private javax.swing.JLabel lblBusqUbicFila1;
    private javax.swing.JLabel lblBusqUbicPiso1;
    private javax.swing.JLabel lblBusqUbicRack1;
    private javax.swing.JLabel lblBusqUbicUbicacion1;
    private javax.swing.JLabel lblRacks;
    private javax.swing.JLabel lblTitulo;
    private javax.swing.JPanel pnlBusqueda1;
    private javax.swing.JTable tblPallets;
    private javax.swing.JTextField txtBusqUbicFila1;
    private javax.swing.JTextField txtBusqUbicPiso1;
    private javax.swing.JTextField txtBusqUbicRack1;
    private javax.swing.JTextField txtBusqUbicUbicacion1;
    // End of variables declaration//GEN-END:variables

}
